1. 概述与设计要点
xgpu ISA v0.1 是面向 32-lane warp 的 shader ISA。一个 warp 包含 32 个 lane;每个 lane 有自己的向量寄存器 v0–v127 与取指 PC,warp 内共享 64 个 uniform 寄存器 u0–u63、控制状态和内存序列。指令为小端字节序。向量操作按 EXEC 掩码逐 lane 执行:未在 EXEC 中的 lane 不读写目的向量寄存器、不产生内存副作用;uniform / 控制操作是 warp 级的,通常忽略 EXEC。整数使用二补码,窄结果按指令后缀截断;浮点为 IEEE-754 binary32/binary64/binary16,NaN、无穷与次正规数行为受 MODE 控制(§4)。所有保留位必须为零;未定义编码在执行时报非法指令陷阱(§5)。
设计要点:
- 无独立谓词寄存器:32-lane 掩码正好一个字,EXEC 直接保存在 uniform 侧(
execCSR 与u寄存器互为读写窗口)。 - 描述符在 uniform 文件(AMD 风格):buffer/sampler 描述符为
udesc4,image 描述符为udesc8;全零描述符为 null;非一致索引由编译器生成 waterfall 循环。 - 定长指令 + 低位长度编码:32 位(
w0[0]=0)与 64 位(w0[1:0]=01)两种;w0[1:0]=11保留(v0.1 非法)。 - PC 是相对
CODE_BASE的 32 位偏移:全部代码位于一个 4 GiB code heap;PC 恒 4 字节对齐;分支立即数按格式scale=4解码为字节偏移,目标是本指令地址加偏移。 - 异步访存 / SFU + waitcnt:访存与 SFU 按 6 个计数器(vm/vst/tex/ls/sm/sfu)跟踪,
waitcnt等待完成;fixed:n指令 n 周期后写回(§2.6)。 - 迭代 SFU:超越、除法、平方根在 SFU 上迭代执行(
async:sfu);近似指令的误差界写在 §6/§7 的语义列。 - 陷阱策略 v0.1 = 暂停 warp 并上报 CP:陷阱精确(§5);
trapbase处理程序可选。 - 结构化控制流由 saveexec 家族实现(§3.2)。
1.1 主 opcode 分区(摘要)
32 位指令(bit0 = 0)使用 0x02–0x5C:0x02/04/06 整数三源、0x08 整数 .vu、0x0A/0C 整数立即数、0x0E 一元、0x10 mov.vu、0x12 movi、0x14/16/18 fp32、0x1A/1C packed/pack、0x1E/20 fp64、0x22/24 sfu、0x26–0x2C 比较、0x2E–0x3A xlane、0x3C–0x44 salu、0x46 J、0x48 JL、0x4A B、0x4C JR、0x4E SYS、0x50 WAIT、0x52 CSR、0x54 interp、0x56 bary/cov、0x58 demote/discard、0x5A tile、0x5C zs;0x00 非法、0x5E–0x7E 保留。
64 位指令([1:0]=01):0x01 X、0x05 XL、0x09 H、0x0D HC、0x11 UL、0x15 load、0x19 store、0x1D/21 atom(0x21 含 .rtn)、0x25 uld、0x29 tex、0x2D img。固定字段、掩码与逐条编码见 §6/§7 各表与 YAML。